import greenfoot.*; 
import java.util.Timer;
import java.util.TimerTask;
/**
 * Write a description of class Mundo here.
 * 
 * @author (your name) 
 * @version (a ve

/**
 * Write a description of class Mundo here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Mundo extends World
{
   
  // private static final GreenfootImage bgImage = new GreenfootImage("carretera.gif");
    private static final GreenfootImage bgImage = new GreenfootImage("car1.gif");
    private int scrollSpeed;
    private GreenfootImage imagenG;
    private GreenfootImage scrollingImage;
    private int scrollPosition = 0;
    private boolean pause;
   private needle n = new needle();
    private  Ladron l=new Ladron(n);
    private  Poli p=new Poli(l);
    private int dano;
    private int ganaste;
    private int score;
    private int num;
    private int vel;
    private int cont;
    private int numbalas;
    private int nivel;
     
    /**
     * Constructor for objects of class Mundo.
     * 
     */
    public Mundo()
    {    
        
        super(1000, 600, 1); 
        menu();
        numbalas=10;
        score=0;
        num=600;
        dano=100;
        nivel=0;
        scrollSpeed=1;
        pause=false;
        setPaintOrder(Peaton.class,Alcantarilla.class, Turbe.class,CarroObs.class,Tronco.class,Ladron.class);
    }
    
    /**
     * Actua
     */
    
    public void act()
    {
        cont++;
        ChecaVida();
        scroll();
        
    }
    
    /**
     *  /**
     *scroll del mundo por medio de dos variables 
     * velocidad de scroll y posicion de la imgagen ademas de insertar los objetos que van 
     * apareciendo en el mundo
     */
    
    public void scroll()
    {
        if(pause)
        {
            if(scrollSpeed!=0)
            {
                if(scrollSpeed > 0 && scrollPosition <= 0)
                {
                    scrollPosition = getWidth();   
                }
                if(scrollSpeed < 0 && scrollPosition >= getWidth())
                {
                    scrollPosition = 0;
                }
                scrollPosition -= scrollSpeed;
                paint(scrollPosition);
                changeAlcantarilla();
                changeTronco();
                changePeaton();
                changeArma();
                changeGas();
                 
            }
            changeVehiculo();
        }
           
        
    }
    
     /**
     *  metodo en el que se checa si gano o perdio el jugador ademas de hacer diferentes acciones 
     *  dependiendo del caso en el que se encuentre el jugador
     */
    
    
     /**
     * metodo en el cual se insertan los objetos que lleva el menu del juego
     */
    public void menu()
    {
        setBackground("Portadaa.png");
        addObject(new Menu(),500,300);
        addObject(new Play(),500,430);
        addObject(new Ayuda(),815,530);
        addObject(new Credits(),150,530);
    }
    
     /**
     * Pintura de la imagen de desplazamiento en la posición dada 
     */
    private void paint(int position)
    {
        GreenfootImage bg = getBackground();
        bg.drawImage(scrollingImage, position, 0);
        bg.drawImage(scrollingImage, position - scrollingImage.getWidth(), 0);
    }
    
     /**
     * Devuelve una imagen con las dimensiones dadas.
     */
    private GreenfootImage getScrollingImage(int width, int height)
    {
        GreenfootImage image = new GreenfootImage(width, height);
        for(int x = 0; x < width; x += bgImage.getWidth()) {
            for(int y = 0; y < height; y += bgImage.getHeight()) {
                image.drawImage(bgImage, x, y);
            }
        }
        return image;
    }
    
    
     /**
     *  metodo en el que se checa si gano o perdio el jugador ademas de hacer diferentes acciones 
     *  dependiendo del caso en el que se encuentre el jugador
     */
    public void ChecaVida()
    {
        if(this.dameDano()<=0 )
        {
           this.removeObjects(this.getObjects(null));
           setBackground("carcel.png");
           //setBackground("campeon.jpg");
           addObject(new Atras(),880,450);
           pause=false;
            cambiaDano(10);
        }
        else
           if(this.dameGanaste()==1)
           {
               
                switch(nivel)
                {
                    case 1: 
                            dano=100;
                            addObject(new Poli(l),0,400);
                            this.cambiaGanaste(0);
                            Greenfoot.playSound("sirena.wav");
                            if( num-100>=100)
                                cambianum(damenum()-100);
                            else
                                num=50;  
                  
                    break;
                    
                    case 2:
                            dano=100;
                            removeObjects(getObjects(Poli.class));
                            addObject(new PoliArm(l),0,400);
                            this.cambiaGanaste(0);
                            Greenfoot.playSound("sirena.wav");
                            if( num-100>=100)
                            {
                                    cambianum(damenum()-100);
                            }
                            else
                                    num=50;
                  
                     break;
                  
                     case 3:
                            dano=100;
                            removeObjects(getObjects(Poli.class));
                            addObject(new PoliArm(l),0,400);
                            this.cambiaGanaste(0);
                            Greenfoot.playSound("sirena.wav");
                            if( num-100>=100)
                            {
                                cambianum(damenum()-100);
                            }
                            else
                                num=50;
                  
                     break;
                     
                            case 4:
                            dano=100;
                            removeObjects(getObjects(Poli.class));
                            addObject(new PoliArm(l),0,200);
                            addObject(new Poli(l),0,500);
                            this.cambiaGanaste(0);
                            Greenfoot.playSound("sirena.wav");
                            if( num-100>=100)
                            {
                                cambianum(damenum()-100);
                            }
                            else
                                num=50;
                  
                     break;
                     
                     case 5:
                            dano=100;
                            removeObjects(getObjects(Poli.class));
                            addObject(new PoliArm(l),0,200);
                            addObject(new PoliArm(l),0,400);
                            addObject(new Poli(l),0,600);
                            this.cambiaGanaste(0);
                            Greenfoot.playSound("sirena.wav");
                            if( num-100>=100)
                            {
                                cambianum(damenum()-100);
                            }
                            else
                                num=50;
                  
                     break;
                     
                     case 6:
                            this.removeObjects(this.getObjects(null));
                            addObject(new Atras(),700,700);
                            setBackground("campeon.jpg");
                                pause= false;
                                nivel=0;
                    break;
                }
            }
    }
    
    /**
     * Saber si esta en pausa el juego
     */
    public boolean getPause()
    {
        return pause;
    }
    
     /**
     * Agregar Objetos
     */
    
    public void changeAlcantarilla()
    {
        if(Greenfoot.getRandomNumber(num)<1)
        {
            addObject(new Alcantarilla(),999,Greenfoot.getRandomNumber(210)+260);
        }
    }
    
    /**
     * Objetos tipo Tronco
     */
    public void changeTronco()
    {
        if(Greenfoot.getRandomNumber(num)<1)
        
            addObject(new Tronco(),999,Greenfoot.getRandomNumber(210)+260);
    }
    
    /**
     * Carros en sentido contrario
     */
    
    public void changeVehiculo()
    {
        if(Greenfoot.getRandomNumber(num)<1)
        
            addObject(new CarroObs(l),999, Greenfoot.getRandomNumber(210)+260);
    }
    
    /**
     * Persona en la orilla 
     */
    public void changePeaton()
    {
        if(Greenfoot.getRandomNumber(num)<1)
            
            addObject(new Peaton(),999,460);
    }
    
    /**
     * 
     */
    
    public void changeGas()
    {
        if(Greenfoot.getRandomNumber(500)<1)
            addObject(new Gas(),999,Greenfoot.getRandomNumber(210)+260);
    }
    
    /**
     * Cargador para la pistola
     */
   
    public void changeArma()
    {
        if(Greenfoot.getRandomNumber(num)<1)
            addObject(new Arma(),999,Greenfoot.getRandomNumber(210)+260);
    }
    
     /**
     * metodo en el cual se inicia el juego con los objetos iniciales
     */
    public void ecenario()
    {
        pause=true;
        GreenfootImage background = new GreenfootImage(2000, 600);
        scrollingImage = getScrollingImage(2000, 600);
        background.drawImage(scrollingImage, 0, 0);
        setBackground(background);
        addObject(new Niveles(),930,540);
        addObject(l, 100,300);
         addObject(new Margen(),200,getHeight()-getHeight()+25);
        addObject(new Margen(),getWidth()-410,getHeight()-getHeight()+25);
        addObject(new Counter(),getWidth()-210,getHeight()-getHeight()+25);
        addObject(new Escala(), 25, 250);
        addObject(new Escalado(), 25, 470);
        addObject(new Sangre(l),l.getX(),l.getY()-55);
         addObject(new Reloj(), getWidth()-395,getHeight()-getHeight()+35);
         addObject(new Score("points: "),220,getHeight()-getHeight()+30);
    }
    
   
     
    public void cambiaSpeedScroll(int vs)
    {
        scrollSpeed=vs;
    }
    
    public int dameSpeedScroll()
    {
        return scrollSpeed;
    }
    
    /**
     * 
     */
    
    public int dameNumbalas()
    {
        return numbalas;
    }
    public void cambiaNumbalas(int d)
    {
        numbalas=d;
    }
    
    
    /**
     *regresa la puntuacion
     */
    public int dameScore()
    {
        return score;
    }
    
    /**
     * cambia la puntuacion
     */
    public void cambiaScore(int s)
    {
        score=s;
    }
    
    public int dameDano()
    {
        return dano;
    }
    
    /**
     * Para modificar el daño al impacto 
     */
    public void cambiaDano(int v)
    {
        dano = v;
    }
    
    
    public int dameGanaste()
    {
        return ganaste;
    }
    /**
     * Funcion para gaste
     */
    
    public void cambiaGanaste(int g)
    {
        ganaste=g;
    }
    
    /**
     *  Nivel actual
     */
    public int dameNivel()
    {
        return nivel;
    }
    
  /**
     * Cambiar el nivel
     */
    
    public void cambiaNivel(int n)
    {
        nivel=n;
    }
    
    /**
     * 
     */
    
    public int  damenum()
    {
        return num;
    }
    
    /**
     * Cambiar el numero aleatorio
     */
    public void cambianum(int d)
    {
        num=d;
    }
    
}
